نویسنده: اهدیه خالدیان (1)
منبع: راسخون




 

چکیده

در بحث سیستم ‌های توزیع شده یکی از مباحثی که اهمیت دارد فرآیندها و نحوه عمل آن‌ها می‌ باشد. در فرآیندها موضوع مهمی که مطرح می‌ شود چندنخی است که چند نخی در سیستم ‌های توزیع شده مزایای زیادی دارد. یکی از کاربردهای چندنخی در رابطه مشتری و خدمتگزار است، به همین دلیل در اینجا مشتری و خدمتگزار کامل مرور می‌ شود. در مورد فرآیندها برای اجرا روی سیستم ‌های ناهمگن در یک محیط توزیع شده مجازی‌ سازی مطرح می‌ شود و انواع مجازی سازی بیان می‌ شود. یکی دیگر از مهمترین ویژگی ‌های فرآیندها در یک محیط توزیع شده امکان مهاجرت از یک ماشین به ماشین دیگر است که مزایای زیادی مانند توزیع بار دارد که در اینجا در مورد مهاجرت نیز به طور مفصل شرح داده شده است.
واژه ‌های کلیدی:
سیستم ‌های توزیع شده، فرایندها، مشتری و خدمتگزار، چند نخی، خوشه بندی، مجازی سازی، مهاجرت

1- مقدمه

تعدادی پردازنده در حال اجرا توسط سیستم عامل ایجاد شده است که روی هر کدام از این پردازنده ها یک برنامه در حال اجراست که این برنامه در حال اجرا را فرآیند می‌ گویند. در مورد فرایندها از نقطه نظر سیستم عامل، مسائلی مانند مدیریت و زمانبندی فرآیندها مهم و مورد بحث است، اما از نقطه نظر سیستم های توزیعی مسائل دیگری مانند نخ بندی، مجازی سازی، مهاجرت کد مطرح می‌ شود. برای فرآیندها جدولی به اسم جدول فرآیند (2) داریم که برای ردگیری این پردازنده های مجازی از آن استفاده کنیم، جدول فرآیند شامل مقادیر ثبات های پردازنده‌ ها، اطلاعات حسابرسی و اولویت ها، فایل های باز و... می‌ باشد.
سیستم عامل باید مراقب باشد تا فرآیندهای مستقل تاثیری بر هم نداشته باشند که منابع سخت افزاری نیاز دارند، این عمل را شفافیت همروندی (3) می‌ گویند و هزینه زیادی دارد، مثلاً هنگام ایجاد فرآیند باید تخصیص منابع صورت گیرد، سوئیچ کردن بین فرآیندهای زمان ‌بر نیاز به واحدهای MMU (4) و نامعتبرسازی خط هایی مانند TLB دارد. موارد مهمی که در مورد فرآیندها در سیستم ‌های توزیع شده در اینجا مطرح شده است چندنخی، مجازی سازی، مشتری، خدمتگزار و مهاجرت کد است که در اینجا در مورد هرکدام شرح داده است.

2- چند نخی: (5)

1-2- معرفی:

از آنجایی که دانه بندی (6) فرآیندهای ایجاد شده در سیستم های توزیعی ناکافی است از یک دانه بندی ظریف تر به اسم نخ بهره می‌ بریم. نخ هم مشابه فرآیند است یک کد مخصوص به خود را دارد که به صورتی مستقل از دیگر نخ ‌ها اجرا می‌ کند اما در اینجا تلاشی برای شفافیت همروندی نمی‌ شود، فقط حداقل اطلاعات موجود در نخ را برای ایجاد امکان اشتراک پردازنده در بین چندین نخ نگه داری می‌ شود. اطلاعاتی که در مدیریت نخ اهمیت چندانی ندارند نادیده گرفته می‌ شوند و مسائلی مانند محافظت از داده ‌ها به عهده برنامه‌ نویس است، این کار دو پیامد دارد: 1- کارایی در چند نخی نه تنها کاهش نمی‌ یابد بلکه گاهاً افزایش می‌ یابد. 2- چون ما در اینجا محافظت را نداریم ایجاد برنامه ‌های کاربردی چند نخی فکر بیشتری می‌ خواهد.

2-2-کاربرد نخ در سیستم های توزیعی

1- در فرآیند تک نخی با اجرای فراخوان سیستمی مسدود شونده کل فرآیند مسدود می‌ شود اما با استفاده از چند نخی می‌ توان این مشکل را حل کرد، به عنوان مثال برنامه صفحه گسترده که در آن وقتی یک سلول تغییر می‌ کند تمام سلول ها به طور خودکار به روز می‌ شوند. اگر از فرآیند تک نخی استفاده کنیم وقتی که در حال به روز شدن است پس کل سیستم مسدود می‌ شود و اگر بخواهیم برای یک سلول جدید اطلاعات بگیریم نمی‌ توانیم، اما اگر از چند نخی استفاده کنیم در کمترین حالت با دو نخ، یک نخ برای به روز کردن کل سیستم و یک نخ برای گرفتن اطلاعات می‌ توانیم از مسدود شدن جلوگیری کنیم.
2- چند نخی امکان استفاده از موازی سازی (7) را به هنگام اجرای برنامه روی یک سیستم چند پردازنده ای فراهم می‌ آورد. که با طراحی مناسب می‌ تواند شفاف باشد، هر نخ به یک پردازنده متفاوت اختصاص می‌ یابد و داده مشترک در حافظه اصلی مشترک است. از این مزیت در سیستم مشتری- خدمتگزار (8) استفاده می‌ کنیم.
3- سومین کاربرد چندنخی در متن برنامه های کاربردی بزرگ است که غالباً به صورت مجموعه ای از برنامه ‌های همکاری کننده ایجاد می شوند که هر یک بایستی توسط یک فرآیند جداگانه اجرا می‌ شوند. برای ارتباط برنامه ‌ها از IPC (9) استفاده می‌ شود که همانطور که در شکل 1 می‌ بینید مهمترین نقطه ضعف آن سوئیچ‌ های زیاد است.
چون IPC نیازمند دخالت هسته است مستلزم تغییر نگاشت حافظه در MMU و تخلیه TLB است. اگر به جای فرآیندها نخ باشد، بدون نیاز به هسته در محیط کاربر تمام ارتباط‌ ها از طریق داده ‌های مشترک صورت می‌ گیرد.

3-2- پیاده سازی نخ

نخ ‌ها غالباً به شکل یک بسته ارسال می‌ شوند، این بسته جهت ایجاد و از بین بردن نخ ‌ها و عملیات متغیرهای همگام‌ سازی مانند متغیرهای انحصاری متقابل و متغیرهای شرطی است.
نخ ‌ها در دو سطح کار می‌ کنند:1- سطح هسته (10) 2- سطح کاربر (11)
مزایای سطح کاربر: 1- ایجاد و از بین بردن نخ ‌ها ارزان است. 2- سوئیچ کردن بین محتوای نخ ‌ها فقط به وسیله چند دستور قابل انجام است. فقط باید مقادیر ثبات پردازنده را ذخیره کرد و سپس مقادیر قبلاً ذخیره شده نخی را که به آن سوئیچ می‌ شود را مجدداً بارگذاری کرد. معایب سطح کاربر: فراخوان سیستمی مسدود شونده فوراً باعث مسدود شدن کل فرآیندی خواهد شد که این نخ و تمامی نخ ‌های دیگر موجود در فرآیند به آن تعلق دارند. برای حل مشکل سطح کاربر باید از پیاده سازی در سطح هسته استفاده کنیم که این کار برای ما هزینه زیادی دارد پس هزینه زیاد از معایب سطح هسته است.
برای اینکه مشکلات بالا حل شود راه حل استفاده از LWP (12) است. در یک فرآیند سنگین وزن (HWP) (13) چندین LWP ممکن است داشته باشیم. در این حالت هر LWP می‌ تواند نخ سطح کاربر ویژه خود را اجرا کند، برنامه های کاربردی چند نخی از طریق ایجاد نخ ‌ها و سپس تخصیص هر یک از نخ ‌ها به یک LWP ساخته می‌ شوند، تخصیص نخ به LWP معمولاً ضمنی بوده و از دید برنامه نویس مخفی است (شکل 2).
مزایای استفاده از LWP ها : 1-از بین بردن و همگام سازی نخ ‌ها نسبتاً کم هزینه بوده و به هیچ وجه نیازمند دخالت هسته نمی‌ باشد. 2- اگر فرآیندی LWP های کافی داشته باشد فراخوانی سیستمی مسدودکننده باعث تعلیق کار فرآیند نخواهد شد. 3- نیازی به اطلاع از برنامه های کاربردی LWP ها نیست و این برنامه فقط با سطح کاربر سروکار دارد. 4- با اجرای LWP های مختلف برروی پردازنده‌ های مختلف به راحتی می توان از آنها در محیط ‌های چند پردازنده استفاده کرد.
معایب: همانند نخ ‌ها در اینجا نیز نیازمند ایجاد نخ ها هستیم که باز هم در سطح هسته است و هزینه زیادی دارد البته ایجاد و از بین بردن ‌ها به ندرت انجام شده و تحت کنترل سیستم عامل است.
در LWP در حالتی که فراخوانی سیستمی مسدود شونده توسط نخ داشته باشیم حالت اجرا از کاربر به هسته تغییر می‌ کند، اما باز هم در محتوای LWP فعلی ادامه می‌ یابد وقتی که یک LWP ی دیگر قادر به ادامه کار نباشد سیستم عامل تصمیم می‌ گیرد یک سوئیچ کردن محتوا (14) به LWP دیگر داشته باشد که در حالت اجرایی به کاربر برمی‌ گردیم و LWP از جایی که قبلاً قطع شده بود ادامه می‌ یابد.

3- نخ در سیستم ‌های توزیعی

یکی از ویژگی ‌های نخ ها آن است که بدون مسدود کردن کل فرآیندی که در آن در حال اجراست راهکار مناسبی جهت فراخوانی های سیستمی مسدود شونده مهیا می‌ کند. به همین دلیل بیان ارتباط به صورتی همزمان با حفظ اتصالات منطقی متعدد بسیار آسانتر خواهد شد، و این ویژگی منجر به ارتباط مشتری و خدمتگزار می‌ شود که در اینجا بررسی می‌ شود.

1-3- مشتری چند نخی (15)

توضیح کاربرد نخ در مشتری چندنخی با یک مثال بیان می‌ شود. برای نمونه جستجوگرهای وب را در نظر بگیرید که مجبورند برای واکشی هر مؤلفه html یک ارتباط TCP/IP ایجاد کنند. در حالتی که چند نخی نباشد باید برای تک تک قسمتهای یک صفحه (متن، عکس و...) جداگانه ارتباط های TCP/IP برقرار کند و تا تکمیل شدن واکشی همه صبر کند و بعد صفحه را نمایش دهد چون که ایجاد اتصال و خواندن داده ‌های ورودی ذاتاً از نوع عملیات مسدود شونده است. اما وقتی چند نخی داریم این مشکل حل می‌ شود چون می‌ توان به ازای هر واکشی آن قسمت را نشان داد، یعنی کار نمایش داده ‌ها همزمان با ورود آن آغاز شود چون هر فایل توسط نخ جداگانه ایی واکشی می‌ شود.
مزیت دیگری که دارد این است که می‌ توان چندین اتصال را به صورت همزمان بار نمود یعنی امکان موازی سازی دارد، به این صورت که خدمتگزارهای وب معمولاً بین چندین ماشین تکثیرشده و هر خدمتگزار دقیقاً واحدی از اسناد وب را ارائه می‌ کند. خدمتگزارهای تکثیر شده در یک سایت واحد و با اسم یکسان هستند، وقتی درخواستی برای وبی می‌ آید از روش Round-Robin و یا... درخواست به یکی از خدمتگزارها ارسال می‌ شود و سایر درخواست‌ها نیز به طور همزمان به سایر خدمتگزارها ارسال می‌ شود، در نتیجه به صورت موازی خدمت داده می‌ شود. به هر درخواست یک نخ جدا اختصاص داده می‌ شود به همین دلیل بلوکه نمی‌ شوند.

2-3- خدمتگزار چند نخی (16)

با وجودی که چندنخی در سمت مشتری کاربردهای فراوانی دارد ولی کاربرد عمده چند نخی در سیستمهای توزیعی سمت خدمتگزار است. چند نخی سمت خدمتگزار دارای مزایایی است:
1- باعث ساده سازی چشمگیر کد خدمتگزار می‌ شود، چون وقتی که یک درخواست می‌ رسد شروع کردن با هندل یک نخ بسیار ارزانتر از هندل یک فرآیند است.
2- سهولت فراوان ایجاد خدمتگزارهایی که از ویژگی ‌های موازی سازی برای افزایش کارآیی خود حتی در تک پردازنده‌ها استفاده می‌ کنند.
برای درک بهتر استفاده از نخ در نوشتن کد خدمتگزار به مثال worker/dispatcher توجه کنید (شکل 3) :
همانطور که در شکل دیده می‌ شود، در یک خدمتگزار که با مدل worker/dispatcher کار می‌ کند، در خدمتگزار چند نخ داریم که یکی از آن‌ها به عنوان توزیع کننده (17) انتخاب می‌ شود، وقتی مشتری یک درخواست به سمت خدمتگزار می‌ فرستد سیستم عامل درخواست را به نخ توزیع کننده می‌ دهد و آن درخواست را می‌ خواند و به یکی از نخ ‌های کارگر می‌ دهد. حال یک فایل را در نظر بگیرید که بر حسب مورد باید در انتظار دسترسی به دیسک مسدود شود. خدمتگزار فایل معمولاً منتظر ورود درخواست برای عملیات فایل می‌ ماند و پس از دریافت آن را اجرا کرده و در پایان پاسخ را برمی‌ گرداند. وقتی مشتری درخواست خود را به نقطه تماس خدمتگزار فایل ارسال می‌ کند یک نخ بیکار انتخاب می‌ شود و درخواست به آن تحویل داده می‌ شود این نخ کار خود را تا هنگام تعلیق شدن بر اثر رسیدن زمان واکشی داده از دیسک ادامه می‌ دهد، وقتی این نخ تعلیق شد نخ بیکارکارگر دیگری برای اجرا انتخاب می‌ شود.
اگر در یک سیستم امکان چندنخی نباشد و طراح با تک نخی نتواند به کارایی قابل قبولی دست یابد راه حل سومی به نام FSM (18) وجود دارد. در ماشین حالت محدود (FSM) با ورود درخواست جدید تنها نخ موجود در سیستم آن را بررسی خواهد کرد و اگر بتواند از طریق حافظه پنهان دیسک به آن رسیدگی می‌ کند، در غیر این صورت پیامی برای دیسک ارسال می‌ کند و به جای مسدود شدن، خدمتگزار وضعیت درخواست فعلی را در یک جدول ثبت می‌ کند و سراغ پیام بعدی می‌ رود. پیام بعدی ممکن است از دیسک باشد که سراغ جدول وضعیت می‌ رویم و یا ممکن است درخواست جدید باشد که رسیدگی می‌ شود.
یادآوری: در حالت تک نخی خدمتگزار هنگام انتظار برای دیسک خدمتگزار بیکار بود و هیچ درخواست دیگری را پردازش نمی‌ کرد.

4- مجازی سازی (19)

اجرای همزمان در تک پردازنده ها فقط تصورات که با سوئیچ کردن سریع ایجاد می‌ شود. مجازی سازی تفکیک بین داشتن یک پردازنده و تظاهر به داشتن بیش از یک پردازنده است.

1-4- نقش مجازی سازی در سیستم ‌های توزیع شده

در مورد مجازی سازی دو مفهوم داریم: 1- تمام سیستم های کامپیوتری توزیعی یک واسط برنامه نویسی برای نرم ‌افزار سطح بالاتر ارائه می‌ دهد. (شکل 4). 2- مجازی‌ سازی به طور خلاصه به توسعه یا تعویض واسط فعلی با هدف تقلید رفتار سیستم دیگر می‌ پردازد (شکل 5).
دلایل استفاده از مجازی سازی: دلایل استفاده را می توان به دو دسته تقسیم کرد: گذشته و حال.
1- در گذشته برای اینکه بتوان نرم افزارهای باقیمانده از گذشته را روی سخت افزار کامپیوترهای گران قیمت مانند IBM370 اجرا کرد از مجازی سازی استفاده می‌ شد که با ارزان شدن کامپیوترها برای مدتی آن را کنار گذاشتند.
2- امروزه نیز به دلایل زیر دوباره به مجازی سازی روی آوردند: 1- نرم افزار گذشته را نمی توان بر روی سکوهای (20) گذشته نگهداری کرد پس برای انتقال واسط ‌های باقیمانده از گذشته به سکوهای جدید از مجازی سازی استفاده می‌ شود. 2- فراگیرشدن شبکه سازی، که مجموعه ایی بزرگ و ناهمگن از کامپیوترهای خدمتگزار در آن وجود دارد، که مجازی سازی برنامه ‌های کاربردی مختلف را اجرا می‌ کند و در اختیار مشتری قرار می‌ دهد، پس تنوع سکوها و ماشین ‌ها را کاهش می‌ دهد.

2-4- معماری ماشین ‌های مجازی

برای درک تفاوت‌ها در مجازی‌ سازی 4 نوع واسطی که غالباً در سیستم ‌های کامپیوتری ارائه می‌ شوند، را باید بدانیم (شکل 6) :
1- واسط بین سخت ‌افزار و نرم ‌افزار، شامل دستورات ماشین که هر برنامه‌ ایی می‌ تواند آن ‌ها را اجرا کند.
2- واسط بین سخت ‌افزار و نرم ‌افزار، شامل دستورات ماشین که فقط توسط برنامه ‌های ممتاز اجرا می‌ شود.
3- واسط فراخوانی ‌های سیستمی، (21) که توسط سیستم عامل ارائه می‌ شود.
4- واسط فراخوانی ‌های کتابخانه‌ ای که غالباً باعث ایجاد چیزی به نام API (22) ( واسط برنامه نویسی برنامه ‌های گرافیکی) می‌ شود. در بسیاری از موارد، فراخوانی ‌های سیستمی توسط یک API مخفی می‌ شوند.

3-4- روشهای مجازی‌ سازی

دو راه حل کلی برای ایجاد مجازی سازی داریم:
1- می‌ توانیم Runtime System بسازیم، که اساساً یک مجموعه دستورات انتزاعی را برای اجرای برنامه ‌های کاربردی ارائه می‌ دهد. این دستورات می‌ توانند ترجمه شوند مانند محیط زمان اجرای جاوا، و یا تقلید شوند مانند اینکه برنامه ‌های کاربردی ویندوز روی پلات فرمهای یونیکس انجام می‌ شود. در این حالت emulator مجبور می‌ شود تا رفتار فراخوانی ‌های سیستمی را نیز تقلید کند که در عمل سخت است (شکل 7).
2- راه حل دوم: ایجاد یک سیستم به صورت لایه ایی است که سخت افزار اصلی را می‌ پوشاند و یک مجموعه دستورات کامل از همان نوع (یا سخت افزار دیگر) را به عنوان واسط ارائه می‌ کند. این واسط همزمان می‌ تواند توسط برنامه ‌های مختلف ارائه گردد به همین دلیل امکان اجرای مستقب و همزمان چندین سیستم عامل مختلف روی یک سکوی واحد فراهم آمد. این لایه را VMM (23) می‌ گویند. به عنوان مثال می‌ توان VMware را نام برد ( شکل 8).

5- مشتری (24)

در اینجا می‌ خواهیم نگاه دقیقتری به ساختار داخلی مشتری و خدمتگزار داشته باشیم.

1-5 - واسط‌ های کاربر شبکه

وظیفه ماشین ‌های مشتری ایجاد ابزار لازم برای برهم کنش کاربران با خدمتگزارهای دور است. که دو راه برای پشتیبانی از این برهم‌کنش داریم: 1- به ازای هر سرویس راه دور یک ماشین مشتری یک نظیر جداگانه داشته باشد تا بتواند روی شبکه با سرویس مورد نظر تماس برقرار نماید (شکل 9). 2- ایجاد دسترسی مستقیم به سرویس‌ های راه دور فقط با یک واسط کاربر معمولی است. در این حالت مشتری به عنوان پایانه ‌ایی بدون نیاز به ذخیره سازی محلی به کار برده شده است (شکل 10). در واسط ‌های کاربر شبکه همه چیز در طرف خدمتگزار است، یعنی در طرف خدمتگزار پردازش می‌ شود به همین دلیل آن را مشتری لاغر (25) نیز می‌ گویند. در این حالت پیچیده تر شدن اینترنت است که مورد توجه قرار می‌ گیرد، چون بیشتر پردازش سمت خدمتگزار است. ولی باعث تسهیل مدیریت می‌ شود.

2-5- سیستم پنجره X (26)

به عنوان مثالی از واسط کاربر شبکه می توان سیستم پنجره X را نام برد. برای کنترل پایانه ‌های نگاشت بیتی (27) به کار می‌ رود. پایانه های نگاشت بیتی شامل یک صفحه نمایش، (28) صفحه کلید و ابزار اشاره مانند ماوس است. X را می‌ توان بخشی از سیستم عامل دانست که پایانه را کنترل می‌ کند (شکل 11). در یک سیستم پنجره x مفاهیم زیر را داریم: پایانه ‌های X (29) که فقط در سمت هسته X اجرا می‌ شوند شامل صفحه نمایش و... هستند. برنامه های کاربردی معمولی (30) درخواست ایجاد یک پنجره را روی صفحه نمایش می‌ دهند. وقتی که یک پنجره فعال باشد همه رخدادها به سمت برنامه کاربردی ارسال می‌ شود. مدیر پنجره (31) که کل صفحه نمایش را دستکاری می‌ کند و محدودیت ها را قرار می‌ دهد. مثلاً اینکه نباید پنجره ‌ها روی هم قرار گیرند. حق ویژه ایی در ارتباط با اجرای همزمان چندین برنامه دارد، این برنامه قادر است تا ظاهر صفحه نمایش را به همان صورتی که به نظر کاربر می‌ رسد، مشخص کند مثلاً چگونه پنجره را با دکمه‌ های اضافی تزیین کند. هسته X (32) واسط نسبتاً سطح پایینی را برای کنترل صفحه نمایش و هم چنین گرفتن رویدادها از صفحه کلید و ماوس ارائه می‌ دهد. این واسط به صورت کتابخانه ای به نام Xlib در اختیار برنامه ‌های کاربردی قرار می‌ گیرد. پروتکلX (33) که پروتکل ‌های ارتباطی شبکه گرا (34) بین یک واسط Xlib و هسته X هستند.
برنامه های کاربردی X لزوماً نباید روی یک سیستم باشند. پروتکل X به وسیله فراخوانی ‌های Xlib قادر به تبادل داده ‌ها و رخدادها (35) با هسته X خواهد بود. مثال: برای ایجاد یا حذف پنجره، Xlib قادر است به هسته X درخواست بدهد و هسته X بسته ‌های رویداد را به Xlib برمی‌ گرداند، که در برابر وقایع محلی مانند ورودی صفحه کلید و ماوس عکس العمل نشان دهد. امکان ارتباط چندین برنامه کاربردی را به طور همزمان با هسته X داریم.
وقتی که هسته X درخواستی را از یک برنامه کاربردی از راه دور مثلاً برای دستکاری صفحه نمایش دریافت می‌ کند، هسته X خدمتگزار است و برنامه کاربردی مشتری است. برنامه های کاربردی به کمک فرامین خاص صفحه نمایش که توسط X ارائه می‌ شوند توسط هسته X اجرا می‌ شوند.
واسط‌های کاربر امروز بیشتر از آنچه توسط سیستم ‌هایی از قبیل X یا برنامه ‌های کاربردی ساده آن انجام می‌ شود کار می‌ کنند، بسیاری از واسط‌ های کاربر به برنامه ‌های کاربردی این امکان را می‌ دهند تا در یک پنجره گرافیکی واحد شریک شوند و از طریق عملیات کاربر از این پنجره جهت تبادل داده ‌ها استفاده کنند.

3-5- سند ترکیبی (36)

ایده اصلی در واسط‌ های کاربر همان ایده سند ترکیبی است، که به صورتی روان در سطح واسط کاربر انجام داده شده‌اند. واسط کاربردی که می‌ تواند با سندهای ترکیبی کار کند این واقعیت که برنامه ‌های کاربردی مختلف روی بخش‌ های مختلف سند کاری کنند را مشخص می‌ کند. از نظر کاربر تمام بخش ‌ها به صورت یکپارچه اند. دو نمونه از سندهای ترکیبی: 1- کشیدن و رها کردن (37) 2- درجا ویرایش کردن (38)
1- کشیدن و رها کردن: وقتی که یک فایل را از مکانی به مکان دیگر انتقال می‌ دهیم، مثلاً وقتی فایل A را با کشیدن و رها کردن به سطل آشغال انتقال می‌ دهیم به محض اینکه A روی سطل آشغال قرار می‌ گیرد باید آیکن A در سطل آشغال نمایش داده شود و از مکان اول حذف شود.
2- درجا ویرایش کردن: چندین برنامه کاربردی در سطح واسط کاربر با هم جمع شوند. مثلاً در صفحه Word در همان جا یک تصویر را تغییر بدهیم، آن را بزرگ و کوچک کنیم همزمان که متن و... هم داریم.
4-5- نرم ‌افزار سمت مشتری (39)
نرم افزار سمت مشتری فقط واسط کاربر نیست، در بسیاری از موارد بخش ‌هایی از پردازش کردن برنامه کاربردی سمت مشتری انجام می‌ شود. مانند ATM, Cash Register,…. در این مثال ها واسط کاربر نقش کوچکی را در نرم ‌افزار مشتری بازی می‌ کند و عمده کار بر عهده تسهیلات ارتباطی پردازش محلی است. نرم افزار مشتری علاوه بر واسط کاربر و نرم افزارهای مربوط مؤلفه‌ هایی برای شفافیت های توزیعی (40) نیز دارد که نمونه ‌هایی از این شفافیت آمده است.
شفافیت دسترسی (41) : معمولاً با تولید بخش نقطه تماس مشتری (42) از تعریف واسط برای آنچه خدمتگزار باید ارائه دهد ایجاد می‌ شود، این نقطه تماس همان واسط موجود برای خدمتگزار را ارائه می‌ دهد، اما تفاوت ‌های محتمل در معماری ماشین و ارتباطات واقعی را مخفی می‌ کند.
شفافیت مکانی/ مهاجرتی (43) : وقتی که خدمتگزار تغییر محل می‌ دهد این تغییر محل به مشتری اطلاع داده می‌ شود ولی کاربر خبر ندارد. وقتی که فرآیندی از ماشینی یه دیگری مهاجرت می‌ کند کاربر از اینکه روی کدام ماشین فرآیند در حال اجراست باخبر نمی‌ شود و درگیر جزییات این مهاجرت نمی‌ شود.
شفافیت تکثیر (44): یک سیستم توزیعی مجهز به خدمتگزارهای تکثیر شده را در نظر بگیرید، این تکثیر می‌ تواند از طریق ارسال درخواست برای هر یک از نسخه‌ ها به انجام برسد، نرم ‌افزار سمت مشتری می‌ تواند به صورتی شفاف تمام پاسخ ها را جمع آوری کرده و یک پاسخ واحد را به برنامه کاربردی سمت مشتری انتقال دهد (شکل 12).
شفافیت خرابی (45): مخفی ‌سازی خرابی ‌ها ارتباطی با یک خدمتگزار را انجام می‌ دهد، در صورت خرابی خدمتگزار دیگری آزمایش می‌ شود بدون اینکه کاربر متوجه شود که خدمتگزار اصلی خراب شده است.

6- خدمتگزار

خدمتگزار یک فرآیند است که یک سرویس خاص را برای مجموعه‌ ایی از مشتری‌ ها اجرا می‌ کند. یک خدمتگزار منتظر ورود درخواست از جانب مشتری می‌ شود و سپس به آن درخواست رسیدگی می‌ کند و بعد منتظر درخواست بعدی می‌ شود. در مورد یک خدمتگزار باید یک سری مسائل کلی طراحی (46) در نظر گرفته شود.

1-6- مسائل کلی طراحی

مسائل کلی طراحی که در نظر گرفته می‌ شود شامل موارد زیر است:
1- روشهای سازماندهی خدمتگزارها: الف) خدمتگزار تکراری (47) که خود خدمتگزار به درخواست رسیدگی می‌ کند. ب) خدمتگزار همروند (48): خدمتگزار چندنخی درخواست را به یک نخ جدا پاس می‌ دهد، و خودش منتظر درخواست بعدی می‌ شود. به ازای هر درخواست یک فرآیند جدید تولید کنیم.
2- محل برقراری تماس توسط مشتریان با خدمتگزار: این محل که end point ها هستند و مشتری با آن‌ ها ارتباط برقرار می‌ کند، port ها هستند. هر خدمتگزار به پورت خاصی گوش می‌ دهد. سوالی که مطرح می‌ شود این است که مشتریان چگونه این پورت ‌ها را برای یک سرویس شناسایی می‌ کند؟
دو راه برای این کار وجود دارد: الف) تخصیص جهانی یک پورت برای سرویس ‌های معروف، مثلاً FTP:TCP21, Http: TCP80. ب) در حالت دوم از پیش تخصیص یافته نباشد، مثل Time_of_Day ممکن است پورت آن به صورت پویا باشد. برای این حالت دو راه حل وجود دارد : راه اول فرآیندی موسوم به Daemon است که روی هر یک از ماشین ‌های اجرا کننده خدمتگزارهاست. این Daemon نقطه پایانی تمام سرویس ‌های پیاده ‌سازی شده در این ماشین را پی‌ گیری می‌ کند و در اختیار دارد. خود دایمون هم به یک نقطه پایانی از پیش شناخته شده گوش می‌ دهد (شکل 13).
راه دوم استفاده از خدمتگزار ناظر (49) است. یک خدمتگزار ناظر به تمامی نقاط پایانی مربوط به تمام خدمتگزارها گوش می‌ دهد، وقتی که یک درخواست از طرف یک مشتری می‌ رسد خدمتگزار ناظر یک سرویس درخواست ایجاد می‌ کند و آن را به خدمتگزار اصلی می‌ دهد و از آن به بعد خدمتگزار اصلی مربوط به آن سرویس رسیدگی می‌ کند.
3- امکان و چگونگی وقفه خدمتگزار : اگر بخواهیم توقف ایجاد کنیم دو راه داریم، الف) به طور ناگهانی از برنامه خارج شویم و دوباره وارد شویم. خدمتگزار تصور می‌ کند مشتری خراب شده و اتصال را قطع می‌ کند.
ب) فراهم کردن امکان ارسال داده ‌های out-of-band یعنی داده ‌هایی که باید پیش از ورود داده ‌هایی دیگر در همان مشتری پردازش می‌ شوند. که از دو راه این امکان فراهم می‌ شود: 1- دو تا پورت جداگانه داشته باشیم، یک پورت برای داده ‌های out-of-band و یکی دیگر برای داده ‌های دیگر با اولویت کمتر 2- راه دیگر این است که داده ‌های out-of-band را نیز از همان پورت ارسال شود ولی با فوریت بیشتر و با اولویت ارسال شود.
4- بدون حالت (50) بودن یا نبودن خدمتگزار: وقتی که خدمتگزار بدون حالت است اطلاعات مشتریان را نگه نمی‌ دارد و می‌ توانند بدون اطلاع مشتریان وضعیت خود را تغییر دهند. گاهی تغییرات جزئی را نگه می‌ دارند ولی پس از مدتی از دست می‌ رود. مثلاً درخواست‌ هایی که به http می‌ فرستیم.
وقتی که خدمتگزار حالت امن (51) است، به نمایندگی از جانب مشتری برای یک زمان محدود وضعیت مشتری را حفظ می‌ کند و پس از زمان مورد نظر به حالت قبلی خود بازمی‌ گردد. مثلاً فرستادن به روزها (52).
وقتی که خدمتگزار حالت‌دار (53) است اطلاعات ماندگاری از مشتریان در خود نگه می‌ دارند. در این حالت کارایی از دیدگاه مشتری افزایش می‌ یابد. این حالت یک عیب دارد، وقتی خدمتگزار از کار بیافتد باید اطلاعات نگه‌داری شده خود را بازسازی کند و گرنه نمی‌ تواند تعیین کند آخرین بهنگام‌ سازی را روی فایل ‌ها انجام داده است یا نه و ایجاد امکان بازسازی پیچیدگی ‌های زیادی دارد.

7- خوشه (54) خدمتگزار

خوشه خدمتگزار مجموعه ‌ایی از ماشین ‌هایی است که از طریق یک شبکه به هم متصل شده و یا ماشین یا چند خدمتگزار را اجرا می‌ کند. خوشه خدمتگزار از نظر منطقی سه طبقه (55) دارد، در واقع سازمان عمومی آن سه طبقه دارد (شکل 15).
طبقه اول: سوئیچ‌ ها هستند که درخواست ‌های مشتری از طریق آن مسیریابی می‌ شوند. مثلاً TCP سوئیچ لایه انتقال و http سوئیچ مرور وب است. طبقه دوم: حاوی خدمتگزارهای اختصاص یافته جهت پردازش برنامه کاربردی هستند. طبقه سوم: حاوی خدمتگزارهای فایل و پایگاه داده است. این طبقه هم بسته به کاربرد خوشه خدمتگزار روی ماشین ‌های خاص اجرا شده و برای دسترسی پرسرعت به دیسک پیکربندی می‌ شوند و از حافظه ‌های مخفی بزرگ داده‌ ای سمت خدمتگزار استفاده می‌ کنند.
اغلب خوشه ‌های خدمتگزار یک نقطه دسترسی را ارائه می‌ کنند. در صورت خرابی این نقطه خوشه غیرقابل دسترسی خواهد شد که برای حل این مشکل چندین نقطه دسترسی ارائه می‌ شود که با خراب شدن یکی سراغ دیگری برویم. مثلاً (56) DNS می‌ تواند آدرس‌ های متعدد برگرداند که همگی متعلق به یک میزبان واحد باشند که با خراب شدن هر کدام به بعدی مراجعه کنیم. اما این روش راه‌ حلی برای مشکل نیاز به دسترسی ثابت ارائه نمی‌ دهد. از ویژگی ‌های مطلوب از نقطه نظر مشتری و سرور داشتن نقاط با ثبات است. ثبات نقطه دسترسی با عمر طولانی است. این نیاز منجر به به وجود آمدن خدمتگزارهای توزیعی شده است.

1-7- خدمتگزار توزیعی

به مجموعه ایی از ماشین ‌ها که به صورت پویا تغییر می‌ کند و دارای نقاط دسترسی متغیری است اما برای ناظران بیرونی فقط یک ماشین منفرد و قدرتمند به نظر می‌ رسد. ایده اصلی در خدمتگزارهای توزیعی این است که مشتریان از مزایای وجودی یک سرورمقاوم با کارایی بالا و پایدار برخوردار شوند. این ویژگی غالباً به وسیله کامپیوترهای بزرگ به دست می‌ آید که برخی میانگین خرابی آن‌ ها را حتی تا بیش از 40 سال هم ذکر کرده‌اند، اما با دسته‌ بندی ماشین ‌های ساده‌ تر یک خوشه (تکیه نکردن به یک ماشین) می‌ توان به درجه بهتری از پایداری رسید. در خدمتگزارهای توزیعی ابتدا یک آدرس تماس جداگانه و منحصر به فرد به خوشه خدمتگزار نسبت داده می‌ شود. آدرس تماس، همان آدرس دائمی است. در هر زمان یکی از گره‌ های داخل خدمتگزار توزیعی به عنوان نقطه دسترسی این آدرس تماس عمل خواهد کرد اما این نقطه قابل واگذاری به سایر گره ‌ها هم هست.
همانطوری که در شکل 16 دیده می‌ شود یک نقطه دسترسی داریم که تمام نقاط به آن نقطه دسترسی هدایت خواهند شد و این نقطه هم از آن پس مراقب توزیع درخواست ‌ها در بین گره‌ های است که در همان زمان در خوشه هستند که در صورت خرابی این گره یک گره دیگر جایگزین ‌اش خواهد شد. برای تبدیل نشدن این نقطه به گلوگاه از روش ‌های بهینه‌ سازی استفاده می‌ شود. هنگامی که یک گره متحرک آدرس مراقبتی (57) خود، که در عامل ‌خانه (58) خدمتگزار توزیعی ثبت می‌ شود، مثلاً CA را گزارش می‌ دهد مشتری (HA,CA) را به صورت محلی ذخیره خواهد کرد که HA آدرس مربوط به عامل ‌خانه است و از این لحظه به بعد تمام ارتباطات به CA ارسال خواهد شد (شکل16). با بهینه سازی می‌ توانیم به مشتری بقبولانیم که با یک خدمتگزار واحد تماس دارند در حالیکه هر مشتری در ارتباط با یک خدمتگزار توزیعی است و از یک نقطه تماس استفاده می‌ کند.

2-7- مدیریت خوشه‌ های خدمتگزار

متعارف ‌ترین راه برای مدیریت خوشه‌ ها بسط کارکردهای سنتی تک کامپیوترها به خوشه بوده است. یعنی سرپرست شبکه می‌ تواند از راه دور وارد یک کامپیوتر مشتری شده و فرامین مربوط به مدیریت محلی مانند نظارت، نصب و تغییر مؤلفه ‌ها را اجرا کند. در حالت کمی پیشرفته ‌تر، ورود به گره مذکور مخفی می‌ شود و به جای آن یک واسط در ماشین سرپرست شبکه ارائه می‌ شود که امکان جمع ‌آوری اطلاعات از یک یا چند خدمتگزار، ارتقا مؤلفه‌ها، حذف یا اضافه گره‌ ها و... را فراهم می‌ آورد. به عنوان مثال می‌ توان CSM از شرکت IBM را ذکر کرد. پشتیبانی از خوشه ‌های خدمتگزار بزرگ تقریباً همیشه موردی است و از قواعد زیادی می‌ توان استفاده کرد اما رهیافت سیستماتیک خاصی وجود ندارد و هنوز در مراحل اولیه است.

8- مهاجرت (59) کد

تا اینجا بیشتر روی سیستم ‌های توزیعی متمرکز کار کردیم که ارتباطات آن‌ ها منحصر به انتقال داده است مواردی هم داریم که انتقال برنامه حتی در حین اجرای آن‌ ها، باعث ساده شدن طرح سیستم ‌های توزیعی خواهد شد. در سیستم ‌های توزیعی مهاجرت به طور سنتی به شکل مهاجرت فرآیند انجام می‌ شود که طی آن کل فرآیند از یک ماشین به ماشین دیگر انتقال می‌ یابد. انتقال یک برنامه در حال اجرا به ماشین دیگر کاری هزینه‌ بر و دقیق است و بهتر است خوبی برای آن باشد.

1-8- دلایل مهاجرت کد

1- بهبود کارآیی: ایده اصلی این است که با انتقال می‌ توان بار ماشین ‌های دارای بار زیاد را به ماشین ‌های با بار کم کارایی کلی سیستم را افزایش داد. توزیع بار دارای الگوریتم است به این معنی که تصمیمات مربوط به تخصیص و توزیع مجدد کارها را با توجه به وضعیت پردازنده ‌های موجود بر عهده آن‌ها قرار داد.
2- دومین استدلال برای مهاجرت آن است که داده ‌ها بهتر است در مجاورت محل استقرار خودشان پردازش شوند. از همین استدلال می‌ توان برای مهاجرت بخش ‌هایی از خدمتگزار به مشتری استفاده نمود. مانند پرکردن یک فرم توسط مشتری، به جای رد و بدل کردن اطلاعات و پیام‌ های کوچک فرم تکمیل شده را فقط فرستاد. در این حالت هم مشتری کارایی بهتری می‌ بیند و هم خدمتگزار مدت زمان کمتری را صرف پردازش فرم و ارتباطات خواهد کرد، در ضمن از ایجاد ترافیک زیاد برای رد و بدل کردن زیاد پیام ‌ها نیز خودداری می‌ شود.
3- دلیل سوم انعطاف پذیری است که به وجود می‌ آید. برنامه کاربردی توزیعی به بخش‌ های مختلف و تصمیم‌ گیری در مورد محل مناسب برای اجرای هر یک از بخش ‌ها، قبل از اجرای آن‌ ها، است.
مثلاً بخواهیم یک قسمت از برنامه کاربردی در سمت مشتری موجود و در دسترس باشد، زمانی که مشتری کد را نیاز دارد به سرور پیوند می‌ خورد و به صورت پویا پیاده ‌سازی را بارگیری کرده، مراحل آماده‌ سازی اولیه را انجام می‌ دهد و در انتها خدمتگزار را فراخوانی می‌ کند. یکی از مزایای این روش آن است که دیگر لازم نیست برای صحبت با خدمتگزار از قبل این نرم ‌افزار را نصب کرده باشند. هنگام نیاز نرم ‌افزار را انتقال داده می‌ شود و وقتی نیاز نیست دور انداخته می‌ شود (شکل 17).

2-8- روش ‌های مهاجرت کد

مفهوم مهاجرت کد در گسترده ترین حالت به موضوع جابجایی برنامه ‌ها بین ماشین ‌ها با هدف اجرای این برنامه ‌ها در مقصد انجام می‌ پذیرد. در برخی موارد از جمله در مهاجرت فرآیند وضعیت اجرای یک برنامه، سیگنال ‌های معوقه و بخش‌ های دیگر محیط اجرایی آن هم باید انتقال داده شوند. هر فرآیند از سه قطعه تشکیل شده است: قطعه کد (60) (CS)، قطعه منبع (61) (RS) و قطعه اجرا (62) (ES).
انواع مهاجرت را بر اساس موارد مختلفی دسته بندی می‌ کنند: نوع جابجایی (63)، نوع شروع مهاجرت، نوع اجرا
در دسته بندی بر اساس نوع جابجایی دو نوع داریم: 1- جابجایی ضعیف (64) که در آن فقط قطعه کد و برخی داده ‌های آماده‌ سازی اولیه انتقال داده می‌ شود. برنامه انتقال یافته همواره یکی از چندین موقعیت آغاز کننده از پیش تعریف‌ شده دارد. مثلاً اپلت ‌های جاوا (65) که همواره از ابتدا شروع می‌ شوند. مزیتی که این نوع دارد این است که پیچیدگی خاصی ندارد فقط کافیست ماشین هدف قادر به اجرای کد باشد. 2- جابجایی قوی (66) که درآن قطعه کد به علاوه قطعه اجرا هم قابل انتقال است. ویژگی در این روش آن است که می‌ توان فرآیندی در حال اجرا را وسط کار متوقف ساخته و به ماشین دیگری انتقال داد و سپس اجرای آن را از همانجا که متوقف شده بود از سر گرفت.
بر اساس نوع شروع کننده مهاجرت: 1- آغاز شونده توسط فرستنده: یعنی مهاجرت از ماشینی آغاز می‌ شود که کد در آن اقامت داشته یا در حال اجراست. نوعاً هنگام بارگذاری برنامه ‌ها به کامپیوتر خدمتگزار انجام می‌ شود. به عنوان مثال ارسال برنامه جستجو ار طریق اینترنت به یک Data Base Browser برای عمل جستجو در آن است. 2- آغاز شونده توسط گیرنده، که در آن اقدام برای مهاجرت توسط ماشین هدف انجام می‌ شود. اپلت ‌های جاوا نمونه ‌ایی از این رهیافت است.
بر اساس نوع اجرا در ضعیف و قوی متفاوت است. در ضعیف دو نوع اجرا داریم. 1- اجرای کد مهاجرت کرده توسط فرآیند هدف بارگیری شده و در فضای آدرس مرورگر وب اجرا می‌ شوند. برای مثال اپلت های جاوا را در نظر بگیرید. مزیت این راه این است که نیازی به ایجاد فرآیند جدید نداریم و از ارتباط بیهوده ماشین جلوگیری می‌ شود. عیب این راه این است که نیاز به محافظت فرآیند هدف در برابر اجراهای سهوی یا مغرضانه دارد. 2- برای اجرای کد مهاجرت فرآیند دیگری ایجاد کند.
در قوی نیز دو نوع اجرا داریم: 1- همانند سازی (67) راه دور، یک کپی دقیق از فرآیند اصلی که در همان زمان روی ماشین دیگری در حال اجرا است ایجاد شود. فرآیند همانند سازی شده به طور موازی با فرآیند اصلی اجرا خواهد شد. مثال سیستم unix که اجرای فرزند روی ماشین راه دور صورت می‌ گیرد. 2- مهاجرت (68) فرآیند
به طور کلی روشهای مهاجرت در جدول زیر خلاصه شده است:

3-8- مهاجرت و منابع محلی

در مورد قطعه منبع آنچه مهاجرت کد را به امری دشوار تبدیل می‌ کند این است که نمی‌ توان قطعه منبع را به راحتی و بدون هیچ تغییری همراه با سایر قطعه ‌ها انتقال داد. به عنوان مثال فرآیندی مرجعی به یک پورت TCP دارد و از طریق آن با فرآیندهای دیگر (راه دور) ارتباط برقرار می‌ کند. این ارجاع در قطعه منبع نگهداری می‌ شود. اگر این فرآیند به محل دیگری انتقال یابد باید پورت قبلی را رها کرده و یک پورت جدید در مقصد درخواست کند. برای درک اثرات مهاجرت کد بر منبع ابتدا باید انواع پیوند و سپس انواع منبع شناخته شود. انواع پیوند: 1- شناسه 2- مقدار 3- نوع
در پیوند با شناسه فرآیند دقیقاً نیازمند همان منبع ارجاع داده شده خواهد بود. مثلاً هنگامی که فرآیند برای ارجاع به یک وب سایت خاص از URL آن استفاده کند. در پیوند توسط مقدار اگر یک منبع دیگر مقداری برابر با منبع قبلی ارائه کند اجرای فرآیند دستخوش تغییرات نخواهد شد. مثلاً برنامه‌ ایی برای اجرا به کتابخانه ‌های استاندارد C یا جاوا تکیه می‌ کند. این قبیل کتابخانه همواره باید در محلی قابل دسترس باشند ممکن است محل دقیق آن‌ ها در سیستم فایل محلی سایت ‌های مختلف متفاوت باشد.
در پیوند توسط نوع فرآیند فقط نیازمند یک منبع از نوعی مشخص است مثلاً ارجاعات به دستگاه‌ های محلی از قبیل چاپگر، صفحه نمایش و.... نوع پیوند ثابت است اما می‌ توانیم ارجاعات به منابع را تغییر دهیم. انواع منبع: 1- منبع نابسته (69) : به راحتی بین ماشین ‌های مختلف جابجا می‌ شوند به عنوان مثال فایل داد برنامه که معمولاً همراه آن مهاجرت می‌ کند 2- منبع وابسته (70) امکان انتقال یا کپی با هزینه بالا وجود دارد. مانند پایگاه داده محلی که در تئوری وابسته نیستند اما انتقال آن ها به محیط ‌های دیگر امکان پذیر نیست 3- منبع ثابت (71) به شدت به ماشین یا محیط ‌های خاص خود متصل بوده و اساساً قابل انتقال نیست مانند دستگاه ‌های محلی.
از ترکیب انواع ارجاعات با انواع پیوندها خواهیم داشت (جدول 2) : در صورت نابسته بودن منبع معمولاً بهترین گزینه جابجایی آن به وسیله کد در حال مهاجرت است. هنگامی‌ که منبع با فرآیندهای دیگر مشترک باشد استفاده از ارجاع جهانی (72) است یعنی اینکه ارجاعی بتواند از مرز ماشین ‌ها عبور کند. یک نمونه از چنین مراجعی URL ها هستند.
در صورتی که منبع وابسته شده یا ثابت باشد بهترین راه باز هم یک ارجاع جهانی خواهد بود. در مقدار مثلاً کتابخانه ‌های زبان جاوا معمولاً کپی ‌هایی از این منابع روی ماشین هدف قابل دستیابی بوده و باید تا پیش از مهاجرت کد به طریقی کپی شوند. در صورت زیاد بودن حجم داده ‌های کپی شونده مثلاً در فرهنگ لغت استفاده از ارجاع جهانی بهترین گزینه خواهد بود. ساده ترین حالت نابسته است که می‌ تواند از انتقال یا کپی به مقصد جدید استفاده کرد به استثنای مواردی که یک منبع بین چند فرآیند مشترک است. در نوع تنها در صورت فقدان چنین منبعی در مقصد باید منبع اصلی را در ماشین مقصد کپی کرده یا انتقال داد و گرنه از پیوند فرآیند مهاجر به یک منبع محلی از همان نوع استفاده می‌ شود.

4-8- مهاجرت در سیستم ‌های ناهمگن

مهاجرت در سیستم ‌های ناهمگن (73) بسیار مشکل است و دارای مشکلاتی شبیه قابلیت جابجایی است بنابر راه ‌حل‌ های آن‌ ها تا حدودی به هم شبیه است. یک راه حل ساده استفاده از یک واسط میانی با همان ایده ماشین ‌های مجازی است. راه حل جدیدی که ارائه داده ‌اند استفاده از بخش بندی است. به این ترتیب که کل محیط بخش‌ بندی می‌ شود و برای فرآیندهای هر بخش یک دیدگاه یکسان نسبت به محیط محاسباتی ایجاد می‌ شود. اگر این بخش‌ بندی به طور مناسب انجام گیرد می‌ توان هر بخش را از سیستم زیرین آن منفک کرده و واقعاً آن را به ماشین دیگری مهاجرت داد.

9- نتیجه گیری

فرآیندها از مباحث مهم در سیستم ‌های توزیع شده بودند. از جمله مسائلی که در مورد فرآیندها در یک سیستم توزیع شده حائز اهمیت بود چند نخی بود که از اهمیت ناشی از آن به خدمتگزارهای چند نخی و مشتری ‌های چندنخی رسیدیم. اجرای همزمان چند پزدازنده در یک سیستم نیاز به مجازی‌ سازی را می‌ طلبد. انواع مجازی‌ سازی را با توجه به نوع معماری و... داریم که شرح داده شد. در مورد مشتری به عنوان یک واسط عمل می‌ کند که از جمله آن سیستم پنجره X عنوان شد. در خوشه خدمتگزارها برای حل مشکلاتی مانند نقطه دسترسی سراغ خوشه خدمتگزار توزیعی رفته شد که 3 طبقه داشت. مهاجرت یکی از انعطاف ‌پذیری های سیستم ‌های توزیعی است که در آن یک فرآیند در حال اجرا می‌ توانست به ماشین دیگری حرکت کند. مهاجرت با توجه به ملاک ‌هایی به چند دسته تقسیم شدند و در مورد نحوه مهاجرت ‌شان با توجه به این ملاک ها تصمیم گیری شود.

پي‌نوشت‌ها:

1. کارشناسی ارشد معماری کامپیوتر، دانشگاه اصفهان
2. Process Table
3. Concurrency transparency
4. memory management Unit
5. Multi threading
6. Granularity
7. parallelism
8. Client-server
9. inter process communication
10. User Mode
11. kernel Mode
12. Light Weight Process
13. Heavy Weight Process
14. context switch
15. Multi-threaded client
16. Multi-threaded servers
17. dispatcher
18. Finite State Machine
19. Virtualization
20. Platform
21. System Calls
22. Application Programming Interface
23. Virtual Machine Monitor
24. Client
25. Thin Client
26. X Window
27. Bit-Mapped Terminal
28. screen
29. X terminals
30. Normal applications
31. Window managers
32. X Kernel
33. X protocol
34. network-oriented
35. Events
36. Compound Document
37. Drag & Drop
38. In-Placing Editing
39. Client-Side Software
40. Distributed Transparency
41. Access Transparency
42. Client Stub
43. Location/ Migration Transparency
44. Replication Treansparency
45. Failure Transparency
46. General Design Issues
47. Iterative server
48. Concurrent Server
49. Super Server
50. Stateless
51. Safe State
52. Update
53. State Full
54. Cluster
55. tier
56. Domain Name Server
57. care-of address
58. Home Agent
59. Migration
60. Code Segment
61. Resource Segment
62. Execution Segment
63. Mobility
64. Weak mobility
65. Java Applet
66. Strong Mobility
67. Clone
68. Migrate
69. Unattached
70. Fastened
71. Fixed
72. Global Resource
73. heterogeneous

کتابنامه
[1[ Andrew S. Tanenbaum and M.V Steen, Distributed Systems Principles and Paradigms: Processes, 2/E ,Vrije University, Amsterdam, The Netherlands, 2007.
شکل‌ها و جداول:

Figure 1- سوئیچ کردن متن توسطIPC

Figure 2 - ترکیب سطح کاربر و سطح هسته

Figure3worker/dispatcher-

ّ Figure 4- مجازی سازی نوع اول

Figure 5- مجازی سازی حالت دوم

Figure 6- انواع واسط

Figure 7- راه اول مجازی سازی

Figure 8- راه دوم مجازی سازی

Figure 9- واسط کاربر شبکه راه اول

Figure 10- واسط کاربر شبکه راه دوم

Figure 11- سیستم پنجره X

Figure 12- فرستادن درخواست به خدمتگزارهای تکثیری

Figure 13-پیوند دادن مشتری به خدمتگزار با استفاده از دایمون

Figure 14- اتصال با استفاده از یک خدمتگزار ناظر

Figure 15- سازمان کلی 3-tiered برای خدمتگزار خوشه ای

Figure 16- بهینه سازی Rout درخدمتگزارهای توزیع شده

Figure 17 مدل بارگیری پویای نرم افزار سمت مشتری

Execute at target process

Sender initiated

Weak Mobility

Mobility mechanism

 

Execute in separate process

Execute at target process

Receive initiated

Execute in separate process

Clone process

Sender initiated

Strong Mobility

Migrate process

Clone process

Receive initiated

Migrate process

Table 1- انواع روشهای مهاجرت
 

Unattached

Fastened

Fixed

By identifier

MV (or GR )

GR (or MV )

GR

By Value

CP (or MV,GR )

GR (or CP )

GR

By type

RB (or MV,CP )

RB (or GR,CP )

RB (or GR )

Table 2- مهاجرت و منابع محلی